import com.alibaba.fastjson.JSON;
import com.tc.workflow.DaoService;
import com.tc.workflow.entity.MyBody;
import com.tc.workflow.service.FormHeaderService;
import com.vip.vpal.workflow.entity.FormHeader;
import com.vip.vpal.workflow.manager.PageFormManager;
import com.xiaoleilu.hutool.lang.Dict;
import lombok.extern.java.Log;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.team4u.dao.core.Dao;
import org.team4u.sql.builder.Sql;

import javax.sql.DataSource;
import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml", "file:src/main/webapp/WEB-INF/mvc-servlet.xml"}, inheritLocations = true)
@ActiveProfiles(value = "test")
@Log
public class TcWorkflow {
    PageFormManager pageFormManager;

    @Autowired
    private DataSource dataSource;

    @Autowired
    private DaoService daoService;

    //测试dao连接和jar包加载
    @Test
    public void demo() throws Exception {
        Dict set = new Dict().set("sqlDs", "opr").set("sqlKey", "tc_test")
                .set("username", "abc");
        List<Dict> list = daoService.execute(set, new DaoService.SqlCallback<List<Dict>>() {
                    @Override
                    public List<Dict> handle(Dao dao, Sql sql) {
                        return dao.queryForList(Dict.class, sql);
                    }
                }
        );
        log.info(JSON.toJSONString(list));


    }
    @Autowired
    private FormHeaderService formHeaderService;
    @Test
    public void demo2() throws Exception { //测试普通状态流转
        FormHeader formHeader= new FormHeader();

        formHeader.setId(9L);
        formHeader.setCreatedBy("tc");
        formHeader.setFormName("白丹入网");
        formHeader.setFormType("MERCHANT_CANCELL");
        formHeader.setStatus("OPERATE_PENDING");
        formHeader.setUpdatedBy("xx");
        formHeader.setUpdatedByName("xxx");
        formHeader.setCreatedByName("tc");
        MyBody mb=new MyBody();
        mb.setAge("12");
        mb.setName("TC");
        mb.setSay("hello");
        formHeaderService.save(formHeader,mb);
    }
    //只有一个人审批通过，就可以。
    @Test
    public void demo3() throws Exception { //测试普通状态流转
        //1、完成审批  用action是否等于空字符串判断是否审批完成
        //审批如果第一责任审批那么修改-- workflowAssignee.setAction(action)
        //如果第一责任人审批通过后其他责任人审批 那么修改-- workflowAssignee.setAction(action)

        //2、判断是否可以进行下一个状态 WorkflowAssigneeRule
        //ruleType == ANY 如果一个审批通过就可以进入下一状态，如果其中一个没有审批那么不可以进入下一个状态。
        //ruleType == ALL 如果审批拒绝操作可以进入下一个状态，如果审批通过那么需要所有人都审批才可以进入下一个状态。

        //3 使用方需要自己实现，审批人获取服务提供者
        FormHeader formHeader= new FormHeader();

        formHeader.setId(9L);
        formHeader.setCreatedBy("tc");
        formHeader.setFormName("白丹入网");
        formHeader.setFormType("MERCHANT_CANCELL");
        formHeader.setStatus("OPERATE_PENDING");
        formHeader.setUpdatedBy("cai.tian");
        formHeader.setUpdatedByName("田才");
        formHeader.setCreatedByName("tc");
        MyBody mb=new MyBody();
        mb.setAge("12");
        mb.setName("TC");
        mb.setSay("hello");
        formHeaderService.saveWithWorkflow(formHeader,mb);


    }



}
